{
  "cells": [
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "3AbTeDP5Tbou"
      },
      "source": [
        "# Semantic Segmentation\n",
        "\n",
        "**Segmentation** is one of the main computer vision task. For **each** pixel of image you must specify class(background included). Semantic segmentation only tells pixel class, instance segmentation divide classes into different instances. \n",
        "\n",
        "For instance segmentation ten cars is **different** objects, for semantic segmentation **all** cars is one class.\n",
        "\n",
        "<img src=\"images/instance_vs_semantic.jpeg\" width=\"50%\">\n",
        "\n",
        "> Image from [this blog post](https://nirmalamurali.medium.com/image-classification-vs-semantic-segmentation-vs-instance-segmentation-625c33a08d50)\n",
        "\n",
        "Almost all architectures have same structure. First part is **encoder** that extracts features from input image, second part is **decoder** that transforms this features into image with same height and width and some number of channels, may be equal to classes count.\n",
        "\n",
        "<img src=\"images/segm.png\" width=\"80%\">\n",
        "\n",
        "> Image from [this publication](https://arxiv.org/pdf/2001.05566.pdf)"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 210,
      "metadata": {
        "id": "Ug57Bnb5QhfP"
      },
      "outputs": [],
      "source": [
        "import tensorflow as tf\n",
        "import tensorflow.keras.layers as keras\n",
        "import matplotlib.pyplot as plt\n",
        "from tqdm import tqdm\n",
        "import numpy as np\n",
        "from skimage.io import imread\n",
        "from skimage.transform import resize\n",
        "import os\n",
        "import tensorflow.keras.optimizers as optimizers\n",
        "import tensorflow.keras.losses as losses\n",
        "from tensorflow.keras.preprocessing.image import ImageDataGenerator\n",
        "tf.random.set_seed(42)\n",
        "np.random.seed(42)"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 211,
      "metadata": {
        "id": "xhSEogpDFMpK"
      },
      "outputs": [],
      "source": [
        "train_size = 0.8\n",
        "lr = 3e-4\n",
        "weight_decay = 8e-9\n",
        "batch_size = 64\n",
        "epochs = 100"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "D4if75qwFMpJ"
      },
      "source": [
        "## Dataset"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "id": "TkuYGLRKFMpK"
      },
      "outputs": [],
      "source": [
        "!apt-get install rar\n",
        "!wget https://www.dropbox.com/s/k88qukc20ljnbuo/PH2Dataset.rar\n",
        "!unrar x -Y PH2Dataset.rar"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 198,
      "metadata": {
        "id": "Rumy9ldAFteW"
      },
      "outputs": [],
      "source": [
        "def load_dataset(train_part, root='PH2Dataset'):\n",
        "    images = []\n",
        "    masks = []\n",
        "\n",
        "    for root, dirs, files in os.walk(os.path.join(root, 'PH2 Dataset images')):\n",
        "        if root.endswith('_Dermoscopic_Image'):\n",
        "            images.append(imread(os.path.join(root, files[0])))\n",
        "        if root.endswith('_lesion'):\n",
        "            masks.append(imread(os.path.join(root, files[0])))\n",
        "\n",
        "    size = (256, 256)\n",
        "    images = np.array([resize(image, size, mode='constant', anti_aliasing=True,) for image in images])\n",
        "    masks = np.expand_dims(np.array([resize(mask, size, mode='constant', anti_aliasing=False) > 0.5 for mask in masks]), axis=3)\n",
        "\n",
        "    indices = np.random.permutation(range(len(images)))\n",
        "    train_part = int(train_part * len(images))\n",
        "    train_ind = indices[:train_part]\n",
        "    test_ind = indices[train_part:]\n",
        "\n",
        "    X_train = tf.cast(images[train_ind, :, :, :], tf.float32)\n",
        "    y_train = tf.cast(masks[train_ind, :, :, :], tf.float32)\n",
        "\n",
        "    X_test = tf.cast(images[test_ind, :, :, :], tf.float32)\n",
        "    y_test = tf.cast(masks[test_ind, :, :, :], tf.float32)\n",
        "\n",
        "    return (X_train, y_train), (X_test, y_test)"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 199,
      "metadata": {
        "id": "kCjj0YKcGBKr"
      },
      "outputs": [],
      "source": [
        "(X_train, y_train), (X_test, y_test) = load_dataset(train_size)"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 200,
      "metadata": {
        "id": "jP2_-AjIFMpO"
      },
      "outputs": [],
      "source": [
        "def plotn(n, data):\n",
        "    images, masks = data[0], data[1]\n",
        "    fig, ax = plt.subplots(1, n)\n",
        "    fig1, ax1 = plt.subplots(1, n)\n",
        "    for i, (img, mask) in enumerate(zip(images, masks)):\n",
        "        if i == n:\n",
        "            break\n",
        "        ax[i].imshow(img)\n",
        "        ax1[i].imshow(mask[:, :, 0])\n",
        "    plt.show()"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "9tBja_1KFMpP"
      },
      "source": [
        "**Let's plot some images with corresponding masks.**"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 201,
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 203
        },
        "id": "IA8ziDUJFMpQ",
        "outputId": "941c2263-ee84-48f4-9127-334f13b4d9ff"
      },
      "outputs": [
        {
          "data": {
            "image/png": "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",
            "text/plain": [
              "<Figure size 432x288 with 5 Axes>"
            ]
          },
          "metadata": {
            "needs_background": "light"
          },
          "output_type": "display_data"
        },
        {
          "data": {
            "image/png": "iVBORw0KGgoAAAANSUhEUgAAAX8AAABdCAYAAABNV2buAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+WH4yJAAAgAElEQVR4nO2dd3gU1frHP2dmS3ojhYQSCIQmINJBL1dFAcWCHSxYLyCiYq/3XkV/NoqKiF7QK+q9FlREr72hKNKL9IQQIBAIJYQQkmyyO3t+fyRBIAnJZmd3JmQ+z7MPm2H2vGe+e+bdM+855z1CSomFhYWFRdNCMboCFhYWFhbBx3L+FhYWFk0Qy/lbWFhYNEEs529hYWHRBLGcv4WFhUUTxHL+FhYWFk2QgDh/IcQwIUSGECJLCPFwIGw0RixdqmNpUh1Lk5qxdNEXofc8fyGECmQC5wO7gOXAKCnlRl0NNTIsXapjaVIdS5OasXTRn0D0/PsCWVLKbCllOfABcGkA7DQ2LF2qY2lSHUuTmrF00ZlAOP8WwM5j/t5VeaypY+lSHUuT6lia1Iyli87YjDIshBgDjAFQUXuFERVM41AZ7hKKgjc8BOGVCLdGYodCopXaQ2GbS2NQstxHP19fQgjHRbELuK32atWtiQgNIS7tMM1Uj0/2g8364jic28qRXm+t59RHEzC4rQSZEMIpoxQM0MQbG05sSiFJajkAEsn6onhCdmvIsnK/y/cHve4fvxEgHA5Qjuk3ezSk213x3w47rkQHkRGlFB8Kxb63xGdf4QtFFByQUiY05LOBcP65QKtj/m5Zeew4pJSzgFkAUSJO9hOD9a+JEKiJCXjap2A7WIyWkY3SvSOuycVoXoUjnzYnZeR2/t3uY/ZrCrPzz2Fq82WoovYHorXlLh64ejwsW+dTVQ7JfFaw4Ng7qJoudWmiREYS+42N99ou8Mm2EZRJN2fMfIBW//d7refURxMIUlsxCYdkPqv59dhDQdGk+Mp+zJg8nR7OpOOOa9LL96WhjP/qJjo9lY22f79fdhqKHvePvyg9upD1oIP/DphNilp29PhSV0v+/s71RGd7GXjfMl5ovgJVhFCglTDkH48R99ZiXetxLD/Ij3c09LOBcP7LgXQhRFsqvpyRwLUBsFM7ikrZBT3Zeb7KpAs+4tzQeezwhHL9klu5petiHo3PAKCsqxunsAPhJKrwUvIK6oqEdXeEsG1EBG2X+ValKGIBQhqqi7A7yHqsK6tTXwRCfDNuAE5h56WbZ/PSp5ehbcys8Rx/NTkViSIWL16CoYlyemd2XBSLq7nGU0M+pofTWe0cVSgMCysj44qZ9NpxJ8lTjXH+hrYVITjwt/7884G3uSS8BLBXvipoGXGYS25/BS/eSn9S4UNi1TDue/gD3ll6fq33gJHo7vyllB4hxATgW0AF/i2l3KC3ndqwtU1l48OJ/HrBi7S0RVQejSDZBllnzznu3IovynfsHQ/7/BlFKCDJoSG6KCrZk3qx7LqpRChhPts2isGhZdw+Jo72E2v+f780OUVRhEKIDKOUIwHTRAkP58A13fm/R99gSJi7Xp+xC5VLbviV1R+2xrOr2oNIwDGqrQink7yxvZh732Q62MNrPc8u1MpqHc/IyALmvl7Awef74PxqRUBDQL4SkJi/lPIr4KtAlH0yhM3Glmej2TZoNhBR5/kNpVlECSgqeLVq9qWmnewLLpRS9vbVnjbodL6+djKxauCuKRCoQmH6RXOYMedyvGtqnZHXIE1OZWzYkVJ2CFT5OyaezrLbpxGh+PYE+WTCH/Sc0ZWU6w7hLS4OUO1OSlDbinA6yf5nT36/YTLxau2Ovy7mtf+elTPKefimsSi/rNaxhv5xyqzwVcLC2Pp0H34ZODPgtt7u9C5b/9MN10V9K2x370TOEwNJ/DWMbe93w9Y8qY4SfEBRyb5J0M7euBx/FcPDXGTcElkxyG5hOGqzOG4b9Y3Pjh8qfswX9X6LjOe6Nonv88Doniy9Yapfjr+KXk4HzifzUJvF6VAzfThlnH/OxB6svv5Fkm2Bd5Jt7RFknT2HUS98ydap/Tn3veVsGjOTd1IXsukvc8h6OQk1Sp+ZBmpCM54ZME+XsoziqaEfY0tJNroaFkBJ/3ZcH+3bZIVjiVBCOKfPBoRaPcRxKqF2Tuequ34gVtUvzPpp+hdsH99Jt/L85ZRw/t6/nsGbt73SoN6MP4yLySVr1Os8ELf16DFVKCwZ+DrFg3T6kuOi6RmyS5+yDGJkxH62j25jdDUsgD39bST62ZPtF52NmhCvU43Mh3ZOT4Z/soSHmm3RtVy7UJl47XzcQ8wR5WzUzl8JD0dNSCCvXyh9nOZ5DI1Vw8jrr1PPaF8+U/eep09ZBqEKhb/f9D5qeprRVWnS2FqkMHiY/zHnm6N2suWuthXjXqcYok83Rr/2OXfE7Kz75AYwJno3Y175xBT3QqN1/ra0Nsj/xTDu90V8PeGFk87NNwKp032h5R9k60OdWeSqfbFUY2BkZAFbb9JxLCRICKeT4iv6UTSyP7a2qQi7w+gqNQhbWhvU97y8klL7uov6Yhcq3147mcyZvSi6pj9qfDMdamg8amwsYVPzGB11IKB2rorI5+DLCnLA6QG1UxeGrfD1BzUpkfB3ipib9mPlEfMNhnpTS3UrS/15NROfuoOhd//G04kNj9cazRUXLmLNS0mGLRSqN4qKGhVB+RntsP19Lx+0n0qIEGS5Q3hm53C2fpNGi4Ul2HflIx12tGYR4JWomTlohwqNrn01hN3BxkcS2JY+G736e23tEWy7ZBZlF7u5KutixM1t8GRv16Vsozg0tCPfpb1EoNfRqEJhSY+P+fLdEJ555EYiPloaUHu10eicv5qexqYHm5HV9l+Y+cGlVUKBfoVJSdxbi1n9cxrdpnVjYe83dB2IChZPJq6m06N3kP5AAdJjzvQUakICm6e24h99v6BPyDec5gilqnMRr8Ln6d9AOhwYX8yqshiiFBdpdhcAk/LO5asNvQjZ4qTVj0dgyVoDr+RP8sb1ZtWwKYD+bcYp7Hye/g0PfHwGf9zZA7Foje42gkXBFcVBHTccHuZi4aNLWfdtFNph39cO+Yt5vWctbLk1iawL/2W6MM+JnJmQjRoTrWuZnm07aDkqm/5v34dbanV/wGTYhcrXl09F9u5idFVqpHREX7p9t58tg9/gpqh9lY6/ZuLVcIaEuekfopKohpOohjOjxVKyh7zJxjtmct4bi7AlN0cJCUEJDz/uFcxpkmpMNF1HbQx4Z2Fy89VcOvtHbG1aB9ROoFA7tGPKGR8F3e598Ytw9U0Pul1oZM5f2Gyk9dlpescPcF+zpbh6t9e9XK/LRdpHh9jl0S+sFEw62MPJvM18cXPtnJ48NOUdnk9ao0v7ujd2C+Efuem+2MXQZblHX+cv3cO+2wcEZbBU2B1sfrkdb6Z+H3BbALdFZ5NzZctGORCcMS6B4WGuoNtNVMPJPceY+6HxhH2EYM8dfZnf/gXMGOM/kVg1jINdnCT9EIDCTbREvCE8P+gj3m57Np5tDc5JpStqehoDX1qi682vCuWYManjueihydxQdD8x7wYu4ZcSFsaOe3qw7NzJOIX/i5Tqg1PY+eTOyQxrcy8d7lmNdBubCbS+qEmJTBoe/F5/FeXJ9UuxoTfm70JXcuTKvrx7zzTaNpKVriXeciJ3BSY0k98zlhRb9SRcjYUrwgvIuiXF6GoAlSlBnozinwnB2xCqgz2cguHFAQ3/bHuoBytuf0mX1am+0MEeznNDPkCJahz3KYBMjqdPSI5h9mcM+g9qR/2jBHXRKJy/cDqx/20v3R3mz2ZZhV2olDYLgLxCUDT8SIOT0pkBVShccOHyivi3wZSddwbfnDkj6Ha/HjCT3Q8MwNZC/x9BYbPRd8h6whRjwgkqslGlfyhpFUGqzbhQ5PAwFxnj4oOumbmdv6KiNosj/9qevN/pP0bXxifsQqXgr/rHENXoKP7WeZHu5QabxxN/IeOZbobWQe3Qjoun/GhI3qR29ghW3f0K+2eFI2pIpewXQiHGbtyYUE/nbrypzQ2z7ysHutoM70z999JXUbp1DKpN0zp/4XSyZXpvrl60nq8nTQlKzh69ebHfh3jO7aVrmd7iUhbmGzM7QE/i1XCyr3rdGONCoHTtROF0yb1x2cbUgYoOwvTOH6AmN77FbycjSXVQ2DHS6GrUCzUqirMuMz7TZv8Qla2jYoNq07TOf98tPVk94iVuitoX9LilXlwSXkLoP3ajhOgXrpLucrbNa6dbeU0NYXewd8IA7v/sIxZ2+9jo6hCnutBi9XWUUtNYti9V1zJ9IUxxcO1jX5sihUFd7L6xK1NTzLEz3q0X/YAtOXhPTKZ0/mr7tkRfvptopfZ51o2F2WkfofXSL5OfEhLC4e6NYxbFydCkl1mFwR30VcLCyHi9OwsenMLgUM0UU4Y72MPZP8ldMeCn1xRJr8bhxYn6lNVAxsdsY9t1zU0d+xc2GymXbw96QsjauD8ug623tw2aPeNb/wkoYWHEvH2IH7p8anRVdCFeDaWwnT4/YsJmI+P5HqwbGvwBSj35sVSl07t38NnwvkGzKewOsv5xOuuGzjDd6uiVveby4Ffz2D5JPz1af1HI3CP6LjL0BVUovH3jy2yZcwZ75nfGe1YPw+pSG0psLCOTfdyPNYCoQuG5Ue9iaxucpzbTOX8RHs7VictN0SvTA7tQKdRpFpfnrO78OGKKaXoqDeGTI1E8Pf5m0h5eHLRcMMLuYOtTVdtgmlO7s0O9CE2/XrJcvYEpW4boVl5D6Ou0k33+v1nb9328Txw0X1K8mEh6mCxd+vCwQnZe3iIotkznYQvPTuOvIfuMroauqKfpkLdDCLaOtDWadQ41oUkvk169Hse3K4Jms8rxr7h+mul6/Mey1X2E1K+P6FrmocPmud5723yHmmiyPQAOH+HrImNnnJ2IXaicPWp5UHb8Mp3zz7uk3NQ3qa+4pYa2wf9dvWwtUnj6nE90qJFxrCzXaPH13qDZs7VswY5HerPouimmHz/6sLAXyrqtdZ9YT5SQENo9V87lWefrVqY/9HHm426dYHQ1jkPbu485n5yPJs2VLv2p5gspGhT4GX2mcv5KZCTNE8yXEtcfLttyEWkvZ/hXiBBk3N2akREmT4VcB9nliZCvY7bTOth2Uyrrx87we+eqYFDidYCmz4pweWYP0n/TyJskSQkNfrbImjCVozmG1P8Vst1TYnQ1jiNaCWXXJZ6AD5ab5ztRVDKfOo3vu35gdE10ZdOqVLT8g36VYWvdkmkj3m704yCrS1KR5cHLYxLSN7/RaLa2sAVS06cHmjM0lOkpy1nd5wNmtDAmV/yJRCshHOpovid6kZnDfw4Fb+JBfXl24DzUxMA+KZnmzrAlxvPi8HcMW5IeCDTpJXaT/7/eO69sxfAwfePBwcYtNb6fNQBvUVFQ7CmRkVzTdlVQbPnL1dmDcd8dp1sitPJo8yX+swuV/f0000399BYVMWf5QKOrUY0Lwndz+C+BnfZpGucPECKMyW4XSNQyPz8fE81lo39pND3Y2tjkdtP8p+CFrYTTQaojsNvx6UGZdLNnWnu8a3RKLCcEqV326FOWznx2wXRyHxyAGhvclax10fn5g0Ffc1IX0Uoouy8JrD80jUfRCg4xv0DfVAhGowqF/NP97IUlJzIyerk+FTIQl1QRQQz5lPZqy3lh5prGdyIFWgnPHOhB1PJc/QqVkpy8ONMNYgJ0d4Sw8q6X2fRc8DNYngxtSzYvfHGp0dWohiOkiTh/WV7O+oPJRldDd1p2y/P7UVcV5nuM9xWXtIM3eA7pYGeHqdOCjNgylCtuvpPlV3TAs1PfH6lOD+6h8zt3MGjdZRzQinUt21+cws65p2/SP5mdn6T8pnHEG/zNXIzENM4fKTm44NRz/nsKovzafMUb4sBO43b+bqlxy7xxaLnBC0cc7mrOFBiF3lKuzh7MkSdaYP9hJVrWNt1tePbk0faRxYRdlMvA38brXr6/jE1agNI6OAuZ6kvkyly+KDaX//F6m8psHyD5txJ2eRr3wOaxlEk34Qsa3vtUO7an6NlSWtvMN0uiPrilxisFqXT66A46/F9GUDdtV5zm3OP4jM8mUnReMeqCwA9GS3c5Sqb5nn4SlDJkqLkmdnh25fLYl9cYXY3jUDcGdkGnqZy/bVUmz+0dbHQ1dGNTuZfmPzVstbJwOrj6s4Us6j6vUQ32fldiZ1mZm5Vl5XSdM4FvhpxG+4lL0AqCN79fCQ/ntNbmG/TUpJfITBWvK3jhhZD8oJmqN6q5Jvwcpf3cEjaVm2fOvz3AETtT7eHrLSnh258GwA3mmJvsL2M2Xk9cA/ep1ULtXBmRA5gzF01NlEk3f590O9FZJUi7QpuFS/AEcb9hW8sWaM1jyboykj/avQyYq3epCoXhN/3GqoXdkKs3BNye59xe3Dr2y4Db8ZUk1UneoDgS1xpdk+MRKzdze+a1/Nx1vtFVAcAT4FvfdF3K0L0m7Rb4yD6tGPuchs/ddkdi2iRktbFfKyMypwzx+x8ov6wO7kbzQpD5QgJvzXud9TdMN+16kWeS1pJ9lf/pPurDtpskd8Y2rPMRSJzCzm3j/2e6fP/SXU7+DymmmSnl6RbYELjpnP+pgCa99Pt6IpHz/dghSGl8g7zP7D0P2+LA92hrQgkL4/LOa0i2RRi+Jd/JePVQK9p8EYTQgqLSurl/K8sDyR0xO9l+tfm2emz9fg6fFJtjHcKozisDuibCPM5fCBACd+PY/e2kZLpddJpR5NeKTbW08T0Bub0qeI350VLi47gk2nwreo94XZRJN5r0clHmBXx55QDE738E3K7SJZ3pHcydKkWa8Dfak7uHSesvMroaAIyOWQrJgUvxYIqYf3lyOOr7yShC8lbrVwCddjQyiDS7nW1XxJHqR0zTVio5oBWbeq76iTza/FsuG/cgyW+uwVsS3IEzV/tEujrKAPNk73xyfxd+eOIvlEcqICH+px1ouZlBsX2oewwd7Y37PjIEr0bU3EhK+pabNnSoF6Zw/l0S9vFVx68q/2r8DdYp7DQfsNuvMoTLzdKyRIaHNZ6FJ23tEfz20DQGH7qHmHcXB9W25lCwm6jtFGglfPvsICI/XULVRN3gTXSF8ghh6vCXmYn9NYeFrkiGhfmZm8XkmCLso9D4Qhx1kXfIv/iV9Hj4cL/5sg3WRahw4DGg810epaKaKGnYe0Udifk+OL38mkhYeZg1Zae28woU2r4DTN4+1OhqBJw6nb8QopUQYoEQYqMQYoMQ4u7K43FCiO+FEFsq/42tPC6EENOFEFlCiLVCiJ6BvohgszPXzeArcuk6aAfd/prD9NmHADhYoDHkmlzaD9jG/nHv4pYVMX8pJRlyDUDXemsiJb8t7xzAq9CXKk06Dcphy9vPkiO3AOCW5aySC1kkv2GVXOifJichbyCm6um+tnkQ2sECXLKElfIXFstvWSy/q5cuLkrw9/6RqzZy1UcTcUvzLXaraivbZzxfb030bCt1Id3l7Fxu/ArkMAGe2MAt8KxPz98D3Cel7AL0B+4QQnQBHgZ+lFKmAz9W/g1wAZBe+RoDvKZ7rQ3GZhNM/mcz1i9M5fcvWzJzTiEbM8p5fkYBg88K48OfW5Aom7OdzQDkk0cJRQDr8UGTDu+WsLa8cYR9qjR57Mu+9A+5gF1s5Yg8zHY2E0ciZ4phxJHotyY1oXZO57kL3tflOvTALTVsC6JBSgSCdLozQAylD+fUSxcvGvh7/0hJh1d38Wlx4LcD9JWqtpLy4l311kSvttKYSLZFsGeAgc5fSrlHSrmq8n0RsAloAVwKvF152tvAiMr3lwLvyAqWADFCCHMlzfCT5CQbPbtXzMGPjFDolO4gN8/D598WM/rqSIq8IaSEdmY/FXH//ewmmVQAfNFE3bWfPE/jmP5UpYkmFWzCQRiRlFF63LUnk+q3JtUQgoyxzbg6wjw7wN29+0xS5mYB4BShRFU8FGMT9nrpYseJHvePZ8dOnpp1HSVec+U5qmorCc2K6q2JLm3FBxyHhCnm+xenBu7JzaeYvxCiDXAGsBRIklJWraHPA5Iq37cAdh7zsV2Vx05Jtu90s2ZdGf16hrB3v0Zyko35h3piO1BMORUx1zJKCeG4X/D6aRLiJFxpfHHbUq2IIg4RTRzllOEUFYMADkL81+REpMQbbZ59IBa5vGQ+0AVtb/W0HqWyuF66iONvS7/un5av/UG3BWNNm7Gyvpro0lZ8oPWne1lUZooh0YBR76sTQkQAnwATpZTHbQwqpZTgW+pJIcQYIcQKIcSK/fnmi0vWhyPFXq66NY9pk+KJivxTyrOjNmNLSvS5vGM1cVNGabt4TnfU3Gs74nXxUkEbRu8YxKN7u1MmzeEAF+1tyeqiH+hID2wnxOBFAwdkT9TlRDrOLOfNQuMXDBV6Sxk/fQLqL9UX93mkh7Us1k2XujSpwltcTIexGZz7xw0+2wg0Wmm5IZrUB2/2DqbsHOZXGf7ilhphuwI3g61ezl8IYafC8f9XSjmv8vDeqkevyn+rujq5QKtjPt6y8thxSClnSSl7Syl7JzQzzxS9+uJ2S668dQ/XXh7B5cMrsu8lJajs2ethSOhB9p0eiYOKnOVOQnFx3Lz3OjWx4yT/NCehovpc4wNaMb3m3MN3g9LY95cS1pwTS+fvx530B6DQWxrw3O5ut2TePUtpLluSKCo6Zg6clMlSAMpkqc+aQHVdqv3/8nW8/sJlhvduz119Iymvr6qW1sIrvaxlMc1pXS9dJMeFG+rVVk6Gt6SEwtXxDb+wAOB2S7Ke/rTemjTk/vEH6fGQ83GaoaGfB/L60frNjICVX5/ZPgJ4E9gkpZx2zH99DtxY+f5G4LNjjo+unPXTHyg8Jjx0SiCl5LZ799E53cE94/5cfn3xkHDemVtEmOJgW/gSEtSK38AEUthDRY4VXzQJzfeyR6to9Ee8Lha64Npt5zD06ftp+8RytPyDSI8H7VAhHe/M5Nx11VPSFmglXJhxIRdPuJtrR95Bpzdu59VDrdin8w+BlJKb79lDSHlLUkWHo8ePvfY97CCBlGrH9WgniT/sZFW5cbmQ9mnFRL8SVS1jp5SSjawgnMh66+KmDL3vn7S5BcwvDmyK4PpSdf/IuBRD2kp9aTFvO9MK0gNtplb+t7A32oHApWUVso7kW0KIs4BfgXVwtEvyKBVx/7lAa2AHcLWU8mDlj8UMYBhQAtwspVxxMhu9Tw+Ry75tdbJTTMVvS0v564hcunV2oFT+fD79SDP6nRHCyLF55OR6aNFCIXfA47SZ8kfFVDXWsIutZcAW6qFJlIiT/dQhFF3Vh/09BfF/SOJ+342Wm1dr2gg58HRSX8xieFxF+oBfD3fg1+n9aPbh6uOckhrfjJK+adz50odcEXG4xrJ8ZeGSEs65bDcRSuzRHbva05Uo4ljHElyUEkoY3eiPXTgapAlU6iKqp/1W45txxa8buDU6T5fr8ZVhm4cjLsyv5vwPyQOs4GciiD56rC5dFvIFbsqyqef9U5smJ7LtmQFsuvFVw1OEV90/EY54qNzaU++2Ul9N6sIzuBdXvfIN42J03GqzHix0wbMjRuJdu/mk5/0gP14ppezdEBt1Ov9g0L27Xa75ro3R1dCdsbsGsONM7aiz9uWLamjjVcLCEGGVq6zK3WiHa3fuWS/2Z+s1r/tsoyZyPEcYc+lYn1MV+9p4T6bLvgkD+emhKcSqwd38ZvSOQey9OxWWrdOlvKXyRw7Lg/UOete3rahdOjDms68YEW7shklHvC7OfvIems32bRV4MO6fmtDO6cm0t2bS3RG8J8u2n42hw/jldWbG9cf5m2I4O+NwUt0nNUK6R+xCiQhubh5vSQnagfyK10kcP0Bo3vFfv1tqlHjLG7QwSJMgNGMH7pNmr6Tv+/fx36JmFHpLg2JzzuFE9o9roZvjDyTaxkymPnid4RuWlEiNsH0aKI1jrE/9eTUj37g3aG1qQ3kpHWcVBzwluimcv3O/l2Vl5pitoie9QrYjYqPrPtEgInO8rCwrZ225i9MWX8fAxycw/Nbx9HzxTh7IO8On+eFF0oZwG+v8ZVkZaQ8t4b2z+zDi1jtJ+3RsQFa4HvG6uH772bT7cBzv3XIB3j826W4jUIR9toKLP77X0NlhiWo40196hbKhjWTxv5S0nrySPv+5Nyh+6pLfxsO6wA30VmGKxG6UuLjmx7vZduEbRtdEV0b9OI4O282XZriKqA+X8/i60QgpablpM3grHGXKt7DhjWjOvG4it0+Yz5jompPUFXpLmXygL/vLI1jwQw/StiwPZvVrRko8e/Jw7Mmjc0ZrvhsarntyvG6f30Wn+9fTvmSJruUGBa9G+j/X0Sn2djYPe82wlBg9nE729rHT+mtDzPuMLCuj7SNLuG/pBIY++QuPx588Fu8rhd5Sntk/gLlretHl73l4grDftSl6/gAdXy1lkcv4FXV68WVJCJ1fLDzqUE2JV8O7fjPahoxq9dQOFZL46u/MHzGQdj/dzAdFsXxQFMvCSj/6zuF4hj14Dyv/EsOOMzXaPro4qBu01wfPjp1M+PU6XcvUpJeEpWrQU1bribe4mE4TM7h1x/mG1aFMuonNbGT3u5SEfbqU3y/vzPjc/roV65YaPT+6h7VnhdPhllV4dgVncNkcPX9ArtnI6M/Gk3n1TMNnI/jLEa+Lh2eNJ2Xj70ZXxW+0jCzSb7LxTmQPUASyZRJ3nh1LwloXUQuWYOrbV0o6Ty5izoBEboqqvuK2IawrdxOzpfE6/iq8RUX8vqIftPk5qHa/LAlhRXEaZV4bsUt2BzXNtV5oWdvY9Hhv1v7r56ODwEe8LvZqHtrYwnz2XzdsP5+OT2eiFQd4x/YTMI3zR0o6vbybKed15KFmW4yujV+M3zmElq+tM7dj9AHp8aAVFFT8kX+Q5oHfiEo3tI2ZvD96KCtezWRGi6V+lVXoLeW6WffRcnFw9yoIFDEbFTTpDVpna4lLY9rY63As3oQIC0U7kBMUu4HA8d1KJky8i9xBCkJC0lKIyjxMxm2R/HjxVNra615T4ZYaY3aeze7RVyUAAAP5SURBVMEHWiHyg39Tmcf5A57tOcx/djDXPbealjZzLEjxlW9KnORM6oizyATxb4sKlq1jw+O92fSvBXR2+D4N9IBWzF05F5E1uxOt3l+JGaZH60HS7wWsK3fTw+nfati6eD4/nbc/PJ+URS5sP6/CKyU04rAZAFISOn8Z7ef/ecgLpN+lMiLrQX6+7+RTjsukm05fjqfzI1sNcfxgMucPED13BeenP8jyv00jQjFuxWZDKNBKeOyF24n/+tToGZ5KOL5fzdUz76f50J1s29sM7fCfaTNsh1UicgSFHTViNiiolZOcpAoHu3mJ2aSQ9NZqYl2LfUtgZXK867cwcvltbD7r3YDamfX9YNo/3fhDoPXCq5H82kouHz6KBad9Vutpd+UOovNDWX8+URuAKRZ5CSGKgMDPbTKWeCBcSlmvHZktTWqmCehiaVKdeOAAkGrdP8fhc1s5FrP0/DMaukqtsSCEWCGlbOPDRyxNauaU1sXSpDqVmvh6fae0JtDgtnKUxj2txsLCwsKiQVjO38LCwqIJYhbnP8voCgQBX6/R0kS/zzQmLE2qY2lSM35doykGfC0sLCwsgotZev4WFhYWFkHEcOcvhBgmhMgQQmQJIR42uj4NQQjRSgixQAixUQixQQhxd+XxJ4QQuUKINZWvC4/5zCOV15whhBh6QnmWJpYmVZ85pTUBS5ea0FuTGpFSGvYCVGArkAY4gD+ALkbWqYHXkQz0rHwfCWQCXYAngPtrOL9L5bU6gbaVGqiWJpYmTU0TS5fAa1Lby+ief18gS0qZLaUsBz4ALjW4Tj4jpdwjpVxV+b4I2AS0OMlHLgU+kFKWSSm3AVlUaAGWJpYmf3LKawKWLjWhsyY1YrTzbwHsPObvXZz8Ak2PEKINcAYVexwDTBBCrBVC/FsIUbXb+8mu29KkAkuTJqYJWLrUhA6a1IjRzv+UQggRAXwCTJRSHgZeA9oBPYA9wFQDq2cIlibVsTSpGUuX6gRSE6Odfy7Q6pi/W1Yea3QIIexUfEn/lVLOA5BS7pVSalJKLzCbPx/DTnbdliYVWJo0EU3A0qUmdNSkZgwe1LAB2VQMUFQNzpxmZJ0aeB0CeAd46YTjyce8v4eKmBzAaRw/OJPNnwNWliaWJk1GE0uXwGtS28vQxG5SSo8QYgLwLRWj9P+WUm4wsk4N5EzgBmCdEGJN5bFHgVFCiB6ABLYDYwGklBuEEHOBjYAHuEPKip3GLU0sTWhamoClS03opkltWCt8LSwsLJogRsf8LSwsLCwMwHL+FhYWFk0Qy/lbWFhYNEEs529hYWHRBLGcv4WFhUUTxHL+FhYWFk0Qy/lbWFhYNEEs529hYWHRBPl/K+5/i19PEgQAAAAASUVORK5CYII=",
            "text/plain": [
              "<Figure size 432x288 with 5 Axes>"
            ]
          },
          "metadata": {
            "needs_background": "light"
          },
          "output_type": "display_data"
        }
      ],
      "source": [
        "plotn(5, (X_train, y_train))"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "ORmas8XhYfS8"
      },
      "source": [
        "## SegNet\n",
        "\n",
        "Simple encoder - decoder architecture with convolutions, poolings in encoder and convolutions, upsamplings in decoder.\n",
        "\n",
        "<img src=\"images/segnet.png\" width=\"80%\">\n",
        "\n",
        "* Badrinarayanan, V., Kendall, A., & Cipolla, R. (2015). [SegNet: A deep convolutional\n",
        "encoder-decoder architecture for image segmentation](https://arxiv.org/pdf/1511.00561.pdf)"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 212,
      "metadata": {
        "id": "pmSOZXhfp6sL"
      },
      "outputs": [],
      "source": [
        "class SegNet(tf.keras.Model):\n",
        "    def __init__(self):\n",
        "        super().__init__()\n",
        "        self.enc_conv0 = keras.Conv2D(16, kernel_size=3, padding='same')\n",
        "        self.bn0 = keras.BatchNormalization()\n",
        "        self.relu0 = keras.Activation('relu')\n",
        "        self.pool0 = keras.MaxPool2D()\n",
        "\n",
        "        self.enc_conv1 = keras.Conv2D(32, kernel_size=3, padding='same')\n",
        "        self.relu1 = keras.Activation('relu')\n",
        "        self.bn1 = keras.BatchNormalization()\n",
        "        self.pool1 = keras.MaxPool2D()\n",
        "\n",
        "        self.enc_conv2 = keras.Conv2D(64, kernel_size=3, padding='same')\n",
        "        self.relu2 = keras.Activation('relu')\n",
        "        self.bn2 = keras.BatchNormalization()\n",
        "        self.pool2 = keras.MaxPool2D()\n",
        "\n",
        "        self.enc_conv3 = keras.Conv2D(128, kernel_size=3, padding='same')\n",
        "        self.relu3 = keras.Activation('relu')\n",
        "        self.bn3 = keras.BatchNormalization()\n",
        "        self.pool3 = keras.MaxPool2D()\n",
        "\n",
        "        self.bottleneck_conv = keras.Conv2D(256, kernel_size=(3, 3), padding='same')\n",
        "\n",
        "        self.upsample0 =  keras.UpSampling2D(interpolation='bilinear')\n",
        "        self.dec_conv0 = keras.Conv2D(128, kernel_size=3, padding='same')\n",
        "        self.dec_relu0 = keras.Activation('relu')\n",
        "        self.dec_bn0 = keras.BatchNormalization()\n",
        "\n",
        "        self.upsample1 =  keras.UpSampling2D(interpolation='bilinear')\n",
        "        self.dec_conv1 = keras.Conv2D(64, kernel_size=3, padding='same')\n",
        "        self.dec_relu1 = keras.Activation('relu')\n",
        "        self.dec_bn1 = keras.BatchNormalization()\n",
        "\n",
        "        self.upsample2 =  keras.UpSampling2D(interpolation='bilinear')\n",
        "        self.dec_conv2 = keras.Conv2D(32, kernel_size=3, padding='same')\n",
        "        self.dec_relu2 = keras.Activation('relu')\n",
        "        self.dec_bn2 = keras.BatchNormalization()\n",
        "\n",
        "        self.upsample3 =  keras.UpSampling2D(interpolation='bilinear')\n",
        "        self.dec_conv3 = keras.Conv2D(1, kernel_size=1)\n",
        "\n",
        "    def call(self, input):\n",
        "        e0 = self.pool0(self.relu0(self.bn0(self.enc_conv0(input))))\n",
        "        e1 = self.pool1(self.relu1(self.bn1(self.enc_conv1(e0))))\n",
        "        e2 = self.pool2(self.relu2(self.bn2(self.enc_conv2(e1))))\n",
        "        e3 = self.pool3(self.relu3(self.bn3(self.enc_conv3(e2))))\n",
        "\n",
        "        b = self.bottleneck_conv(e3)\n",
        "\n",
        "        d0 = self.dec_relu0(self.dec_bn0(self.upsample0(self.dec_conv0(b))))\n",
        "        d1 = self.dec_relu1(self.dec_bn1(self.upsample1(self.dec_conv1(d0))))\n",
        "        d2 = self.dec_relu2(self.dec_bn2(self.upsample2(self.dec_conv2(d1))))\n",
        "        d3 = self.dec_conv3(self.upsample3(d2))\n",
        "\n",
        "        return d3"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 213,
      "metadata": {
        "id": "2GoR8-huFMpn"
      },
      "outputs": [],
      "source": [
        "model = SegNet()\n",
        "optimizer = optimizers.Adam(learning_rate=lr, decay=weight_decay)\n",
        "loss_fn = losses.BinaryCrossentropy(from_logits=True)\n",
        "\n",
        "model.compile(loss=loss_fn, optimizer=optimizer)"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 214,
      "metadata": {
        "id": "HQ_UFglyTbqM"
      },
      "outputs": [],
      "source": [
        "def train(datasets, model, epochs, batch_size):\n",
        "    train_dataset, test_dataset = datasets[0], datasets[1]\n",
        "\n",
        "    model.fit(train_dataset[0], train_dataset[1],\n",
        "                epochs=epochs,\n",
        "                batch_size=batch_size,\n",
        "                shuffle=True,\n",
        "                validation_data=(test_dataset[0], test_dataset[1]))"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 215,
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "MsgM_kZRFMpo",
        "outputId": "fe7cb83b-f6e4-46da-f077-74c6c44aabca"
      },
      "outputs": [
        {
          "name": "stdout",
          "output_type": "stream",
          "text": [
            "Epoch 1/100\n",
            "3/3 [==============================] - 2s 298ms/step - loss: 0.6123 - val_loss: 0.6960\n",
            "Epoch 2/100\n",
            "3/3 [==============================] - 1s 197ms/step - loss: 0.3332 - val_loss: 0.6874\n",
            "Epoch 3/100\n",
            "3/3 [==============================] - 1s 199ms/step - loss: 0.2715 - val_loss: 0.6707\n",
            "Epoch 4/100\n",
            "3/3 [==============================] - 1s 205ms/step - loss: 0.2508 - val_loss: 0.6544\n",
            "Epoch 5/100\n",
            "3/3 [==============================] - 1s 286ms/step - loss: 0.2290 - val_loss: 0.6403\n",
            "Epoch 6/100\n",
            "3/3 [==============================] - 1s 235ms/step - loss: 0.2110 - val_loss: 0.6242\n",
            "Epoch 7/100\n",
            "3/3 [==============================] - 1s 231ms/step - loss: 0.1986 - val_loss: 0.6138\n",
            "Epoch 8/100\n",
            "3/3 [==============================] - 1s 197ms/step - loss: 0.1923 - val_loss: 0.6068\n",
            "Epoch 9/100\n",
            "3/3 [==============================] - 1s 203ms/step - loss: 0.1789 - val_loss: 0.6018\n",
            "Epoch 10/100\n",
            "3/3 [==============================] - 1s 199ms/step - loss: 0.1714 - val_loss: 0.5979\n",
            "Epoch 11/100\n",
            "3/3 [==============================] - 1s 201ms/step - loss: 0.1745 - val_loss: 0.5945\n",
            "Epoch 12/100\n",
            "3/3 [==============================] - 1s 196ms/step - loss: 0.1613 - val_loss: 0.5912\n",
            "Epoch 13/100\n",
            "3/3 [==============================] - 1s 199ms/step - loss: 0.1570 - val_loss: 0.5877\n",
            "Epoch 14/100\n",
            "3/3 [==============================] - 1s 201ms/step - loss: 0.1547 - val_loss: 0.5861\n",
            "Epoch 15/100\n",
            "3/3 [==============================] - 1s 204ms/step - loss: 0.1546 - val_loss: 0.5862\n",
            "Epoch 16/100\n",
            "3/3 [==============================] - 1s 197ms/step - loss: 0.1527 - val_loss: 0.5853\n",
            "Epoch 17/100\n",
            "3/3 [==============================] - 1s 197ms/step - loss: 0.1456 - val_loss: 0.5865\n",
            "Epoch 18/100\n",
            "3/3 [==============================] - 1s 202ms/step - loss: 0.1567 - val_loss: 0.5903\n",
            "Epoch 19/100\n",
            "3/3 [==============================] - 1s 198ms/step - loss: 0.1429 - val_loss: 0.5939\n",
            "Epoch 20/100\n",
            "3/3 [==============================] - 1s 207ms/step - loss: 0.1432 - val_loss: 0.5960\n",
            "Epoch 21/100\n",
            "3/3 [==============================] - 1s 201ms/step - loss: 0.1438 - val_loss: 0.5940\n",
            "Epoch 22/100\n",
            "3/3 [==============================] - 1s 204ms/step - loss: 0.1449 - val_loss: 0.5933\n",
            "Epoch 23/100\n",
            "3/3 [==============================] - 1s 201ms/step - loss: 0.1424 - val_loss: 0.5972\n",
            "Epoch 24/100\n",
            "3/3 [==============================] - 1s 201ms/step - loss: 0.1407 - val_loss: 0.5999\n",
            "Epoch 25/100\n",
            "3/3 [==============================] - 1s 206ms/step - loss: 0.1370 - val_loss: 0.6001\n",
            "Epoch 26/100\n",
            "3/3 [==============================] - 1s 215ms/step - loss: 0.1371 - val_loss: 0.6021\n",
            "Epoch 27/100\n",
            "3/3 [==============================] - 1s 200ms/step - loss: 0.1345 - val_loss: 0.6194\n",
            "Epoch 28/100\n",
            "3/3 [==============================] - 1s 200ms/step - loss: 0.1312 - val_loss: 0.6287\n",
            "Epoch 29/100\n",
            "3/3 [==============================] - 1s 199ms/step - loss: 0.1304 - val_loss: 0.6154\n",
            "Epoch 30/100\n",
            "3/3 [==============================] - 1s 201ms/step - loss: 0.1265 - val_loss: 0.6151\n",
            "Epoch 31/100\n",
            "3/3 [==============================] - 1s 201ms/step - loss: 0.1219 - val_loss: 0.6220\n",
            "Epoch 32/100\n",
            "3/3 [==============================] - 1s 210ms/step - loss: 0.1200 - val_loss: 0.6249\n",
            "Epoch 33/100\n",
            "3/3 [==============================] - 1s 199ms/step - loss: 0.1151 - val_loss: 0.6268\n",
            "Epoch 34/100\n",
            "3/3 [==============================] - 1s 202ms/step - loss: 0.1139 - val_loss: 0.6328\n",
            "Epoch 35/100\n",
            "3/3 [==============================] - 1s 200ms/step - loss: 0.1117 - val_loss: 0.6297\n",
            "Epoch 36/100\n",
            "3/3 [==============================] - 1s 200ms/step - loss: 0.1081 - val_loss: 0.6288\n",
            "Epoch 37/100\n",
            "3/3 [==============================] - 1s 204ms/step - loss: 0.1064 - val_loss: 0.6330\n",
            "Epoch 38/100\n",
            "3/3 [==============================] - 1s 202ms/step - loss: 0.1056 - val_loss: 0.6385\n",
            "Epoch 39/100\n",
            "3/3 [==============================] - 1s 204ms/step - loss: 0.1086 - val_loss: 0.6446\n",
            "Epoch 40/100\n",
            "3/3 [==============================] - 1s 199ms/step - loss: 0.1047 - val_loss: 0.6595\n",
            "Epoch 41/100\n",
            "3/3 [==============================] - 1s 206ms/step - loss: 0.1040 - val_loss: 0.6602\n",
            "Epoch 42/100\n",
            "3/3 [==============================] - 1s 206ms/step - loss: 0.1073 - val_loss: 0.6681\n",
            "Epoch 43/100\n",
            "3/3 [==============================] - 1s 200ms/step - loss: 0.1074 - val_loss: 0.6802\n",
            "Epoch 44/100\n",
            "3/3 [==============================] - 1s 202ms/step - loss: 0.0992 - val_loss: 0.6728\n",
            "Epoch 45/100\n",
            "3/3 [==============================] - 1s 204ms/step - loss: 0.0976 - val_loss: 0.6802\n",
            "Epoch 46/100\n",
            "3/3 [==============================] - 1s 198ms/step - loss: 0.0973 - val_loss: 0.6865\n",
            "Epoch 47/100\n",
            "3/3 [==============================] - 1s 200ms/step - loss: 0.1094 - val_loss: 0.7038\n",
            "Epoch 48/100\n",
            "3/3 [==============================] - 1s 202ms/step - loss: 0.0974 - val_loss: 0.7115\n",
            "Epoch 49/100\n",
            "3/3 [==============================] - 1s 200ms/step - loss: 0.0964 - val_loss: 0.7044\n",
            "Epoch 50/100\n",
            "3/3 [==============================] - 1s 206ms/step - loss: 0.0922 - val_loss: 0.7199\n",
            "Epoch 51/100\n",
            "3/3 [==============================] - 1s 198ms/step - loss: 0.0951 - val_loss: 0.7396\n",
            "Epoch 52/100\n",
            "3/3 [==============================] - 1s 198ms/step - loss: 0.1069 - val_loss: 0.7395\n",
            "Epoch 53/100\n",
            "3/3 [==============================] - 1s 203ms/step - loss: 0.1093 - val_loss: 0.7520\n",
            "Epoch 54/100\n",
            "3/3 [==============================] - 1s 202ms/step - loss: 0.0953 - val_loss: 0.7568\n",
            "Epoch 55/100\n",
            "3/3 [==============================] - 1s 206ms/step - loss: 0.1025 - val_loss: 0.7783\n",
            "Epoch 56/100\n",
            "3/3 [==============================] - 1s 201ms/step - loss: 0.0912 - val_loss: 0.7390\n",
            "Epoch 57/100\n",
            "3/3 [==============================] - 1s 203ms/step - loss: 0.0931 - val_loss: 0.7246\n",
            "Epoch 58/100\n",
            "3/3 [==============================] - 1s 198ms/step - loss: 0.0870 - val_loss: 0.7614\n",
            "Epoch 59/100\n",
            "3/3 [==============================] - 1s 200ms/step - loss: 0.0896 - val_loss: 0.7579\n",
            "Epoch 60/100\n",
            "3/3 [==============================] - 1s 200ms/step - loss: 0.0872 - val_loss: 0.7351\n",
            "Epoch 61/100\n",
            "3/3 [==============================] - 1s 200ms/step - loss: 0.0839 - val_loss: 0.7296\n",
            "Epoch 62/100\n",
            "3/3 [==============================] - 1s 203ms/step - loss: 0.0797 - val_loss: 0.7343\n",
            "Epoch 63/100\n",
            "3/3 [==============================] - 1s 198ms/step - loss: 0.0776 - val_loss: 0.7349\n",
            "Epoch 64/100\n",
            "3/3 [==============================] - 1s 205ms/step - loss: 0.0794 - val_loss: 0.7375\n",
            "Epoch 65/100\n",
            "3/3 [==============================] - 1s 200ms/step - loss: 0.0758 - val_loss: 0.7488\n",
            "Epoch 66/100\n",
            "3/3 [==============================] - 1s 200ms/step - loss: 0.0774 - val_loss: 0.7626\n",
            "Epoch 67/100\n",
            "3/3 [==============================] - 1s 203ms/step - loss: 0.0758 - val_loss: 0.7650\n",
            "Epoch 68/100\n",
            "3/3 [==============================] - 1s 205ms/step - loss: 0.0792 - val_loss: 0.7603\n",
            "Epoch 69/100\n",
            "3/3 [==============================] - 1s 198ms/step - loss: 0.0764 - val_loss: 0.7573\n",
            "Epoch 70/100\n",
            "3/3 [==============================] - 1s 198ms/step - loss: 0.0791 - val_loss: 0.7603\n",
            "Epoch 71/100\n",
            "3/3 [==============================] - 1s 197ms/step - loss: 0.0749 - val_loss: 0.7415\n",
            "Epoch 72/100\n",
            "3/3 [==============================] - 1s 199ms/step - loss: 0.0730 - val_loss: 0.7432\n",
            "Epoch 73/100\n",
            "3/3 [==============================] - 1s 199ms/step - loss: 0.0729 - val_loss: 0.7702\n",
            "Epoch 74/100\n",
            "3/3 [==============================] - 1s 200ms/step - loss: 0.0711 - val_loss: 0.7692\n",
            "Epoch 75/100\n",
            "3/3 [==============================] - 1s 199ms/step - loss: 0.0710 - val_loss: 0.7545\n",
            "Epoch 76/100\n",
            "3/3 [==============================] - 1s 200ms/step - loss: 0.0680 - val_loss: 0.7410\n",
            "Epoch 77/100\n",
            "3/3 [==============================] - 1s 201ms/step - loss: 0.0683 - val_loss: 0.7372\n",
            "Epoch 78/100\n",
            "3/3 [==============================] - 1s 199ms/step - loss: 0.0684 - val_loss: 0.6997\n",
            "Epoch 79/100\n",
            "3/3 [==============================] - 1s 200ms/step - loss: 0.0654 - val_loss: 0.7236\n",
            "Epoch 80/100\n",
            "3/3 [==============================] - 1s 196ms/step - loss: 0.0682 - val_loss: 0.7213\n",
            "Epoch 81/100\n",
            "3/3 [==============================] - 1s 194ms/step - loss: 0.0721 - val_loss: 0.6602\n",
            "Epoch 82/100\n",
            "3/3 [==============================] - 1s 201ms/step - loss: 0.0821 - val_loss: 0.6739\n",
            "Epoch 83/100\n",
            "3/3 [==============================] - 1s 199ms/step - loss: 0.0835 - val_loss: 0.7153\n",
            "Epoch 84/100\n",
            "3/3 [==============================] - 1s 195ms/step - loss: 0.0793 - val_loss: 0.6923\n",
            "Epoch 85/100\n",
            "3/3 [==============================] - 1s 201ms/step - loss: 0.0796 - val_loss: 0.6331\n",
            "Epoch 86/100\n",
            "3/3 [==============================] - 1s 199ms/step - loss: 0.0719 - val_loss: 0.6116\n",
            "Epoch 87/100\n",
            "3/3 [==============================] - 1s 199ms/step - loss: 0.0782 - val_loss: 0.5826\n",
            "Epoch 88/100\n",
            "3/3 [==============================] - 1s 199ms/step - loss: 0.0681 - val_loss: 0.5903\n",
            "Epoch 89/100\n",
            "3/3 [==============================] - 1s 199ms/step - loss: 0.0683 - val_loss: 0.6258\n",
            "Epoch 90/100\n",
            "3/3 [==============================] - 1s 196ms/step - loss: 0.0659 - val_loss: 0.5808\n",
            "Epoch 91/100\n",
            "3/3 [==============================] - 1s 196ms/step - loss: 0.0660 - val_loss: 0.5802\n",
            "Epoch 92/100\n",
            "3/3 [==============================] - 1s 202ms/step - loss: 0.0668 - val_loss: 0.5854\n",
            "Epoch 93/100\n",
            "3/3 [==============================] - 1s 200ms/step - loss: 0.0659 - val_loss: 0.5884\n",
            "Epoch 94/100\n",
            "3/3 [==============================] - 1s 199ms/step - loss: 0.0675 - val_loss: 0.5855\n",
            "Epoch 95/100\n",
            "3/3 [==============================] - 1s 202ms/step - loss: 0.0608 - val_loss: 0.5175\n",
            "Epoch 96/100\n",
            "3/3 [==============================] - 1s 199ms/step - loss: 0.0624 - val_loss: 0.4879\n",
            "Epoch 97/100\n",
            "3/3 [==============================] - 1s 198ms/step - loss: 0.0631 - val_loss: 0.4896\n",
            "Epoch 98/100\n",
            "3/3 [==============================] - 1s 201ms/step - loss: 0.0591 - val_loss: 0.4590\n",
            "Epoch 99/100\n",
            "3/3 [==============================] - 1s 200ms/step - loss: 0.0624 - val_loss: 0.4910\n",
            "Epoch 100/100\n",
            "3/3 [==============================] - 1s 190ms/step - loss: 0.0604 - val_loss: 0.4450\n"
          ]
        }
      ],
      "source": [
        "train(((X_train, y_train), (X_test, y_test)), model, epochs, batch_size)"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 216,
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 203
        },
        "id": "FXvR7P1FFMpo",
        "outputId": "9f4f9a5d-18db-482f-cf1c-143afaee0497"
      },
      "outputs": [
        {
          "data": {
            "image/png": "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",
            "text/plain": [
              "<Figure size 432x288 with 5 Axes>"
            ]
          },
          "metadata": {
            "needs_background": "light"
          },
          "output_type": "display_data"
        },
        {
          "data": {
            "image/png": "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",
            "text/plain": [
              "<Figure size 432x288 with 5 Axes>"
            ]
          },
          "metadata": {
            "needs_background": "light"
          },
          "output_type": "display_data"
        }
      ],
      "source": [
        "predictions = []\n",
        "image_mask = []\n",
        "plots = 5\n",
        "\n",
        "for i, (img, mask) in enumerate(zip(X_test, y_test)):\n",
        "    if i == plots:\n",
        "        break\n",
        "    img = tf.expand_dims(img, 0)\n",
        "    pred = np.array(model.predict(img))\n",
        "    predictions.append(pred[0, :, :, 0] > 0.5)\n",
        "    image_mask.append(mask)\n",
        "plotn(plots, (predictions, image_mask))"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "RU5KGWXaTbso"
      },
      "source": [
        "## U-Net\n",
        "\n",
        "Very simple architecture that uses skip connections. Skip connections at each convolution level helps network doesn't lost information about features from original input at this level.\n",
        "\n",
        "U-Net usually has a default encoder for feature extraction, for example resnet50.\n",
        "\n",
        "<img src=\"images/unet.png\" width=\"70%\">\n",
        "\n",
        "* Ronneberger, Olaf, Philipp Fischer, and Thomas Brox. [U-Net: Convolutional networks for biomedical image segmentation.](https://arxiv.org/pdf/1505.04597.pdf)"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 217,
      "metadata": {
        "id": "dFFh1_UYQc-K"
      },
      "outputs": [],
      "source": [
        "class UNet(tf.keras.Model):\n",
        "    def __init__(self):\n",
        "        super().__init__()\n",
        "        self.enc_conv0 = keras.Conv2D(16, kernel_size=3, padding='same')\n",
        "        self.bn0 = keras.BatchNormalization()\n",
        "        self.relu0 = keras.Activation('relu')\n",
        "        self.pool0 = keras.MaxPool2D()\n",
        "\n",
        "        self.enc_conv1 = keras.Conv2D(32, kernel_size=3, padding='same')\n",
        "        self.relu1 = keras.Activation('relu')\n",
        "        self.bn1 = keras.BatchNormalization()\n",
        "        self.pool1 = keras.MaxPool2D()\n",
        "\n",
        "        self.enc_conv2 = keras.Conv2D(64, kernel_size=3, padding='same')\n",
        "        self.relu2 = keras.Activation('relu')\n",
        "        self.bn2 = keras.BatchNormalization()\n",
        "        self.pool2 = keras.MaxPool2D()\n",
        "\n",
        "        self.enc_conv3 = keras.Conv2D(128, kernel_size=3, padding='same')\n",
        "        self.relu3 = keras.Activation('relu')\n",
        "        self.bn3 = keras.BatchNormalization()\n",
        "        self.pool3 = keras.MaxPool2D()\n",
        "\n",
        "        self.bottleneck_conv = keras.Conv2D(256, kernel_size=(3, 3), padding='same')\n",
        "\n",
        "        self.upsample0 =  keras.UpSampling2D(interpolation='bilinear')\n",
        "        self.dec_conv0 = keras.Conv2D(128, kernel_size=3, padding='same', input_shape=[None, 384, None, None])\n",
        "        self.dec_relu0 = keras.Activation('relu')\n",
        "        self.dec_bn0 = keras.BatchNormalization()\n",
        "\n",
        "        self.upsample1 =  keras.UpSampling2D(interpolation='bilinear')\n",
        "        self.dec_conv1 = keras.Conv2D(64, kernel_size=3, padding='same', input_shape=[None, 192, None, None])\n",
        "        self.dec_relu1 = keras.Activation('relu')\n",
        "        self.dec_bn1 = keras.BatchNormalization()\n",
        "\n",
        "        self.upsample2 =  keras.UpSampling2D(interpolation='bilinear')\n",
        "        self.dec_conv2 = keras.Conv2D(32, kernel_size=3, padding='same', input_shape=[None, 96, None, None])\n",
        "        self.dec_relu2 = keras.Activation('relu')\n",
        "        self.dec_bn2 = keras.BatchNormalization()\n",
        "\n",
        "        self.upsample3 =  keras.UpSampling2D(interpolation='bilinear')\n",
        "        self.dec_conv3 = keras.Conv2D(1, kernel_size=1, input_shape=[None, 48, None, None])\n",
        "\n",
        "        self.cat0 = keras.Concatenate(axis=3)\n",
        "        self.cat1 = keras.Concatenate(axis=3)\n",
        "        self.cat2 = keras.Concatenate(axis=3)\n",
        "        self.cat3 = keras.Concatenate(axis=3)\n",
        "\n",
        "    def call(self, input):\n",
        "        e0 = self.pool0(self.relu0(self.bn0(self.enc_conv0(input))))\n",
        "        e1 = self.pool1(self.relu1(self.bn1(self.enc_conv1(e0))))\n",
        "        e2 = self.pool2(self.relu2(self.bn2(self.enc_conv2(e1))))\n",
        "        e3 = self.pool3(self.relu3(self.bn3(self.enc_conv3(e2))))\n",
        "\n",
        "        cat0 = self.relu0(self.bn0(self.enc_conv0(input)))\n",
        "        cat1 = self.relu1(self.bn1(self.enc_conv1(e0)))\n",
        "        cat2 = self.relu2(self.bn2(self.enc_conv2(e1)))\n",
        "        cat3 = self.relu3(self.bn3(self.enc_conv3(e2)))\n",
        "\n",
        "        b = self.bottleneck_conv(e3)\n",
        "\n",
        "        cat_tens0 = self.cat0([self.upsample0(b), cat3])\n",
        "        d0 = self.dec_relu0(self.dec_bn0(self.dec_conv0(cat_tens0)))\n",
        "\n",
        "        cat_tens1 = self.cat1([self.upsample1(d0), cat2])\n",
        "        d1 = self.dec_relu1(self.dec_bn1(self.dec_conv1(cat_tens1)))\n",
        "\n",
        "        cat_tens2 = self.cat2([self.upsample2(d1), cat1])\n",
        "        d2 = self.dec_relu2(self.dec_bn2(self.dec_conv2(cat_tens2)))\n",
        "\n",
        "        cat_tens3 = self.cat3([self.upsample3(d2), cat0])\n",
        "        d3 = self.dec_conv3(cat_tens3)\n",
        "\n",
        "        return d3"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 221,
      "metadata": {
        "id": "15GA_43BTbtI"
      },
      "outputs": [],
      "source": [
        "model = UNet()\n",
        "optimizer = optimizers.Adam(learning_rate=lr, decay=weight_decay)\n",
        "loss_fn = losses.BinaryCrossentropy(from_logits=True)\n",
        "\n",
        "model.compile(loss=loss_fn, optimizer=optimizer)"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 222,
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "_dgiuvVVFMpr",
        "outputId": "6140f029-b42b-417a-9f70-4c0656e49047"
      },
      "outputs": [
        {
          "name": "stdout",
          "output_type": "stream",
          "text": [
            "Epoch 1/100\n",
            "3/3 [==============================] - 5s 482ms/step - loss: 0.5073 - val_loss: 0.6237\n",
            "Epoch 2/100\n",
            "3/3 [==============================] - 1s 368ms/step - loss: 0.3388 - val_loss: 0.6192\n",
            "Epoch 3/100\n",
            "3/3 [==============================] - 1s 363ms/step - loss: 0.2867 - val_loss: 0.6133\n",
            "Epoch 4/100\n",
            "3/3 [==============================] - 1s 367ms/step - loss: 0.2624 - val_loss: 0.6043\n",
            "Epoch 5/100\n",
            "3/3 [==============================] - 1s 365ms/step - loss: 0.2435 - val_loss: 0.5949\n",
            "Epoch 6/100\n",
            "3/3 [==============================] - 1s 364ms/step - loss: 0.2320 - val_loss: 0.5844\n",
            "Epoch 7/100\n",
            "3/3 [==============================] - 1s 369ms/step - loss: 0.2201 - val_loss: 0.5781\n",
            "Epoch 8/100\n",
            "3/3 [==============================] - 1s 362ms/step - loss: 0.2119 - val_loss: 0.5673\n",
            "Epoch 9/100\n",
            "3/3 [==============================] - 1s 367ms/step - loss: 0.2047 - val_loss: 0.5588\n",
            "Epoch 10/100\n",
            "3/3 [==============================] - 1s 360ms/step - loss: 0.1946 - val_loss: 0.5544\n",
            "Epoch 11/100\n",
            "3/3 [==============================] - 1s 368ms/step - loss: 0.1959 - val_loss: 0.5412\n",
            "Epoch 12/100\n",
            "3/3 [==============================] - 1s 366ms/step - loss: 0.1814 - val_loss: 0.5346\n",
            "Epoch 13/100\n",
            "3/3 [==============================] - 1s 366ms/step - loss: 0.1780 - val_loss: 0.5336\n",
            "Epoch 14/100\n",
            "3/3 [==============================] - 1s 368ms/step - loss: 0.1727 - val_loss: 0.5344\n",
            "Epoch 15/100\n",
            "3/3 [==============================] - 1s 367ms/step - loss: 0.1715 - val_loss: 0.5280\n",
            "Epoch 16/100\n",
            "3/3 [==============================] - 1s 368ms/step - loss: 0.1691 - val_loss: 0.5166\n",
            "Epoch 17/100\n",
            "3/3 [==============================] - 1s 365ms/step - loss: 0.1641 - val_loss: 0.5133\n",
            "Epoch 18/100\n",
            "3/3 [==============================] - 1s 366ms/step - loss: 0.1707 - val_loss: 0.5221\n",
            "Epoch 19/100\n",
            "3/3 [==============================] - 1s 367ms/step - loss: 0.1628 - val_loss: 0.5239\n",
            "Epoch 20/100\n",
            "3/3 [==============================] - 1s 363ms/step - loss: 0.1615 - val_loss: 0.5177\n",
            "Epoch 21/100\n",
            "3/3 [==============================] - 1s 362ms/step - loss: 0.1577 - val_loss: 0.5221\n",
            "Epoch 22/100\n",
            "3/3 [==============================] - 1s 369ms/step - loss: 0.1566 - val_loss: 0.5044\n",
            "Epoch 23/100\n",
            "3/3 [==============================] - 1s 365ms/step - loss: 0.1561 - val_loss: 0.5046\n",
            "Epoch 24/100\n",
            "3/3 [==============================] - 1s 366ms/step - loss: 0.1469 - val_loss: 0.5063\n",
            "Epoch 25/100\n",
            "3/3 [==============================] - 1s 368ms/step - loss: 0.1437 - val_loss: 0.4947\n",
            "Epoch 26/100\n",
            "3/3 [==============================] - 1s 371ms/step - loss: 0.1428 - val_loss: 0.4857\n",
            "Epoch 27/100\n",
            "3/3 [==============================] - 1s 366ms/step - loss: 0.1449 - val_loss: 0.4850\n",
            "Epoch 28/100\n",
            "3/3 [==============================] - 1s 367ms/step - loss: 0.1426 - val_loss: 0.4875\n",
            "Epoch 29/100\n",
            "3/3 [==============================] - 1s 392ms/step - loss: 0.1444 - val_loss: 0.4638\n",
            "Epoch 30/100\n",
            "3/3 [==============================] - 1s 365ms/step - loss: 0.1341 - val_loss: 0.4796\n",
            "Epoch 31/100\n",
            "3/3 [==============================] - 1s 367ms/step - loss: 0.1357 - val_loss: 0.4689\n",
            "Epoch 32/100\n",
            "3/3 [==============================] - 1s 365ms/step - loss: 0.1351 - val_loss: 0.4550\n",
            "Epoch 33/100\n",
            "3/3 [==============================] - 1s 366ms/step - loss: 0.1294 - val_loss: 0.4419\n",
            "Epoch 34/100\n",
            "3/3 [==============================] - 1s 369ms/step - loss: 0.1271 - val_loss: 0.4100\n",
            "Epoch 35/100\n",
            "3/3 [==============================] - 1s 368ms/step - loss: 0.1265 - val_loss: 0.4188\n",
            "Epoch 36/100\n",
            "3/3 [==============================] - 1s 367ms/step - loss: 0.1214 - val_loss: 0.4285\n",
            "Epoch 37/100\n",
            "3/3 [==============================] - 1s 371ms/step - loss: 0.1206 - val_loss: 0.4129\n",
            "Epoch 38/100\n",
            "3/3 [==============================] - 1s 365ms/step - loss: 0.1230 - val_loss: 0.4196\n",
            "Epoch 39/100\n",
            "3/3 [==============================] - 1s 369ms/step - loss: 0.1213 - val_loss: 0.3899\n",
            "Epoch 40/100\n",
            "3/3 [==============================] - 1s 365ms/step - loss: 0.1184 - val_loss: 0.3972\n",
            "Epoch 41/100\n",
            "3/3 [==============================] - 1s 366ms/step - loss: 0.1163 - val_loss: 0.3951\n",
            "Epoch 42/100\n",
            "3/3 [==============================] - 1s 368ms/step - loss: 0.1193 - val_loss: 0.3735\n",
            "Epoch 43/100\n",
            "3/3 [==============================] - 1s 368ms/step - loss: 0.1239 - val_loss: 0.3669\n",
            "Epoch 44/100\n",
            "3/3 [==============================] - 1s 368ms/step - loss: 0.1137 - val_loss: 0.3668\n",
            "Epoch 45/100\n",
            "3/3 [==============================] - 1s 368ms/step - loss: 0.1096 - val_loss: 0.3684\n",
            "Epoch 46/100\n",
            "3/3 [==============================] - 1s 367ms/step - loss: 0.1144 - val_loss: 0.3403\n",
            "Epoch 47/100\n",
            "3/3 [==============================] - 1s 371ms/step - loss: 0.1209 - val_loss: 0.3419\n",
            "Epoch 48/100\n",
            "3/3 [==============================] - 1s 395ms/step - loss: 0.1071 - val_loss: 0.3213\n",
            "Epoch 49/100\n",
            "3/3 [==============================] - 1s 370ms/step - loss: 0.1074 - val_loss: 0.3212\n",
            "Epoch 50/100\n",
            "3/3 [==============================] - 1s 369ms/step - loss: 0.1039 - val_loss: 0.3247\n",
            "Epoch 51/100\n",
            "3/3 [==============================] - 1s 367ms/step - loss: 0.1085 - val_loss: 0.3067\n",
            "Epoch 52/100\n",
            "3/3 [==============================] - 1s 394ms/step - loss: 0.1090 - val_loss: 0.3093\n",
            "Epoch 53/100\n",
            "3/3 [==============================] - 1s 367ms/step - loss: 0.1098 - val_loss: 0.2827\n",
            "Epoch 54/100\n",
            "3/3 [==============================] - 1s 373ms/step - loss: 0.1039 - val_loss: 0.2746\n",
            "Epoch 55/100\n",
            "3/3 [==============================] - 1s 365ms/step - loss: 0.1037 - val_loss: 0.2868\n",
            "Epoch 56/100\n",
            "3/3 [==============================] - 1s 369ms/step - loss: 0.1004 - val_loss: 0.2750\n",
            "Epoch 57/100\n",
            "3/3 [==============================] - 1s 371ms/step - loss: 0.0995 - val_loss: 0.2636\n",
            "Epoch 58/100\n",
            "3/3 [==============================] - 1s 365ms/step - loss: 0.0940 - val_loss: 0.2648\n",
            "Epoch 59/100\n",
            "3/3 [==============================] - 1s 371ms/step - loss: 0.0953 - val_loss: 0.2583\n",
            "Epoch 60/100\n",
            "3/3 [==============================] - 1s 368ms/step - loss: 0.0976 - val_loss: 0.2508\n",
            "Epoch 61/100\n",
            "3/3 [==============================] - 1s 371ms/step - loss: 0.0905 - val_loss: 0.2378\n",
            "Epoch 62/100\n",
            "3/3 [==============================] - 1s 372ms/step - loss: 0.0900 - val_loss: 0.2481\n",
            "Epoch 63/100\n",
            "3/3 [==============================] - 1s 396ms/step - loss: 0.0858 - val_loss: 0.2540\n",
            "Epoch 64/100\n",
            "3/3 [==============================] - 1s 373ms/step - loss: 0.0847 - val_loss: 0.2499\n",
            "Epoch 65/100\n",
            "3/3 [==============================] - 1s 372ms/step - loss: 0.0841 - val_loss: 0.2326\n",
            "Epoch 66/100\n",
            "3/3 [==============================] - 1s 369ms/step - loss: 0.0871 - val_loss: 0.2275\n",
            "Epoch 67/100\n",
            "3/3 [==============================] - 1s 372ms/step - loss: 0.0827 - val_loss: 0.2274\n",
            "Epoch 68/100\n",
            "3/3 [==============================] - 1s 370ms/step - loss: 0.0889 - val_loss: 0.2166\n",
            "Epoch 69/100\n",
            "3/3 [==============================] - 1s 370ms/step - loss: 0.0882 - val_loss: 0.2222\n",
            "Epoch 70/100\n",
            "3/3 [==============================] - 1s 369ms/step - loss: 0.0885 - val_loss: 0.2330\n",
            "Epoch 71/100\n",
            "3/3 [==============================] - 1s 368ms/step - loss: 0.0878 - val_loss: 0.2104\n",
            "Epoch 72/100\n",
            "3/3 [==============================] - 1s 372ms/step - loss: 0.0843 - val_loss: 0.2211\n",
            "Epoch 73/100\n",
            "3/3 [==============================] - 1s 392ms/step - loss: 0.0837 - val_loss: 0.2141\n",
            "Epoch 74/100\n",
            "3/3 [==============================] - 1s 374ms/step - loss: 0.0858 - val_loss: 0.1999\n",
            "Epoch 75/100\n",
            "3/3 [==============================] - 1s 367ms/step - loss: 0.0798 - val_loss: 0.2131\n",
            "Epoch 76/100\n",
            "3/3 [==============================] - 1s 372ms/step - loss: 0.0769 - val_loss: 0.1851\n",
            "Epoch 77/100\n",
            "3/3 [==============================] - 1s 396ms/step - loss: 0.0788 - val_loss: 0.1921\n",
            "Epoch 78/100\n",
            "3/3 [==============================] - 1s 372ms/step - loss: 0.0771 - val_loss: 0.2266\n",
            "Epoch 79/100\n",
            "3/3 [==============================] - 1s 373ms/step - loss: 0.0738 - val_loss: 0.1826\n",
            "Epoch 80/100\n",
            "3/3 [==============================] - 1s 371ms/step - loss: 0.0728 - val_loss: 0.1870\n",
            "Epoch 81/100\n",
            "3/3 [==============================] - 1s 373ms/step - loss: 0.0759 - val_loss: 0.1821\n",
            "Epoch 82/100\n",
            "3/3 [==============================] - 1s 372ms/step - loss: 0.0830 - val_loss: 0.1887\n",
            "Epoch 83/100\n",
            "3/3 [==============================] - 1s 373ms/step - loss: 0.0861 - val_loss: 0.1783\n",
            "Epoch 84/100\n",
            "3/3 [==============================] - 1s 372ms/step - loss: 0.0854 - val_loss: 0.1988\n",
            "Epoch 85/100\n",
            "3/3 [==============================] - 1s 373ms/step - loss: 0.0857 - val_loss: 0.1749\n",
            "Epoch 86/100\n",
            "3/3 [==============================] - 1s 372ms/step - loss: 0.0820 - val_loss: 0.1620\n",
            "Epoch 87/100\n",
            "3/3 [==============================] - 1s 368ms/step - loss: 0.0874 - val_loss: 0.1668\n",
            "Epoch 88/100\n",
            "3/3 [==============================] - 1s 374ms/step - loss: 0.0744 - val_loss: 0.1711\n",
            "Epoch 89/100\n",
            "3/3 [==============================] - 1s 371ms/step - loss: 0.0750 - val_loss: 0.1632\n",
            "Epoch 90/100\n",
            "3/3 [==============================] - 1s 399ms/step - loss: 0.0717 - val_loss: 0.1742\n",
            "Epoch 91/100\n",
            "3/3 [==============================] - 1s 372ms/step - loss: 0.0723 - val_loss: 0.1670\n",
            "Epoch 92/100\n",
            "3/3 [==============================] - 1s 374ms/step - loss: 0.0713 - val_loss: 0.1652\n",
            "Epoch 93/100\n",
            "3/3 [==============================] - 1s 372ms/step - loss: 0.0718 - val_loss: 0.1707\n",
            "Epoch 94/100\n",
            "3/3 [==============================] - 1s 373ms/step - loss: 0.0739 - val_loss: 0.1692\n",
            "Epoch 95/100\n",
            "3/3 [==============================] - 1s 400ms/step - loss: 0.0650 - val_loss: 0.1621\n",
            "Epoch 96/100\n",
            "3/3 [==============================] - 1s 374ms/step - loss: 0.0653 - val_loss: 0.1547\n",
            "Epoch 97/100\n",
            "3/3 [==============================] - 1s 372ms/step - loss: 0.0681 - val_loss: 0.1475\n",
            "Epoch 98/100\n",
            "3/3 [==============================] - 1s 369ms/step - loss: 0.0613 - val_loss: 0.1513\n",
            "Epoch 99/100\n",
            "3/3 [==============================] - 1s 371ms/step - loss: 0.0665 - val_loss: 0.1537\n",
            "Epoch 100/100\n",
            "3/3 [==============================] - 1s 363ms/step - loss: 0.0640 - val_loss: 0.1525\n"
          ]
        }
      ],
      "source": [
        "train(((X_train, y_train), (X_test, y_test)), model, epochs, batch_size)"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 228,
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 203
        },
        "id": "iEu5wjuMFMps",
        "outputId": "9deaded5-fe99-4cf4-dfe1-4e5eb12d3c0f"
      },
      "outputs": [
        {
          "data": {
            "image/png": "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",
            "text/plain": [
              "<Figure size 432x288 with 5 Axes>"
            ]
          },
          "metadata": {
            "needs_background": "light"
          },
          "output_type": "display_data"
        },
        {
          "data": {
            "image/png": "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",
            "text/plain": [
              "<Figure size 432x288 with 5 Axes>"
            ]
          },
          "metadata": {
            "needs_background": "light"
          },
          "output_type": "display_data"
        }
      ],
      "source": [
        "predictions = []\n",
        "image_mask = []\n",
        "plots = 5\n",
        "\n",
        "for i, (img, mask) in enumerate(zip(X_test, y_test)):\n",
        "    if i == plots:\n",
        "        break\n",
        "    img = tf.expand_dims(img, 0)\n",
        "    pred = np.array(model.predict(img))\n",
        "    predictions.append(pred[0, :, :, 0] > 0.5)\n",
        "    image_mask.append(mask)\n",
        "plotn(plots, (predictions, image_mask))"
      ]
    }
  ],
  "metadata": {
    "accelerator": "GPU",
    "colab": {
      "collapsed_sections": [],
      "name": "SemanticSegmentation.ipynb",
      "provenance": []
    },
    "kernelspec": {
      "display_name": "Python 3",
      "language": "python",
      "name": "python3"
    },
    "language_info": {
      "codemirror_mode": {
        "name": "ipython",
        "version": 3
      },
      "file_extension": ".py",
      "mimetype": "text/x-python",
      "name": "python",
      "nbconvert_exporter": "python",
      "pygments_lexer": "ipython3",
      "version": "3.7.12"
    }
  },
  "nbformat": 4,
  "nbformat_minor": 0
}
